package CONTROLADOR;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.table.TableModel;

import MODELO.ModeloCategoria;
import MODELO.ModeloIngrediente;
import MODELO.ModeloOrden;
import MODELO.ModeloProducto;
import VISTA.frmOrdenes;

public class ControladorOrden implements ActionListener{
	private frmOrdenes frmOrdenes;
	private ModeloOrden modeloOrden;
	private Vector<ModeloProducto> productos;
	
	public static void main(String[] args) {
		new ControladorOrden();
	}
    
	public ControladorOrden() {
		this.frmOrdenes = new frmOrdenes();
		this.frmOrdenes.setVisible(true);
		frmOrdenes.addListener(this);
		this.modeloOrden = new ModeloOrden();
		cargarTabla();
		frmOrdenes.limpiar(modeloOrden.contarOrdenes());
	}
	private void cargarTabla() {
		TableModel m = frmOrdenes.getTblProductoOrdenes().getModel();	
		int i =0;
		while(i< frmOrdenes.getTblProductoOrdenes().getRowCount()) {
			m.setValueAt("", i, 0);
			m.setValueAt("", i, 1);
			i++;
		}
		productos = new ModeloProducto().listar();
		i =0;
		for (ModeloProducto modelo: productos) {
			m.setValueAt(modelo.getCodigo(), i, 0);
			m.setValueAt(modelo.getDescripcion(), i, 1);
			m.setValueAt(modelo.getPrecio(), i, 2);
			i++;
		}
		
	}
	

	@Override
	public void actionPerformed(ActionEvent evt) {
		if(evt.getActionCommand().equals("Cancelar")){
			frmOrdenes.limpiar(modeloOrden.contarOrdenes());
		}
		else if(evt.getActionCommand().equals("OK")){
			if(!frmOrdenes.getTxtCedula().getText().isEmpty() && !frmOrdenes.getTxtEscribirNombres().getText().isEmpty())
			if(!frmOrdenes.contar())
			{
				modeloOrden.setCodigo (frmOrdenes.getLblNro().getText());
				modeloOrden.setCedula(frmOrdenes.getTxtCedula().getText());
				modeloOrden.setNombre(frmOrdenes.getTxtEscribirNombres().getText());
				modeloOrden.setStatus("A");
				modeloOrden.setTotal((Double.parseDouble(frmOrdenes.getLblNro().getText())));
				if(modeloOrden.registar()){
					
					Vector<String> v = new Vector<String>();
					Vector<Double> c = new Vector<Double>();
					Vector<String []> vAux = frmOrdenes.getInfoTabla();
					for (String[] strings : vAux) {
						ModeloProducto m = buscarProducto(strings[1]);
						v.add(m.getCodigo());
						c.add(Double.parseDouble(strings[0]));
						int i =0;
						while(i<Integer.parseInt(strings[0])){
							m.actualizarStockIngredientes();
							i++;
						}
						
					}
					modeloOrden.registarProductos(v, c);
					frmOrdenes.limpiar(modeloOrden.contarOrdenes());
					frmOrdenes.mostrarMensaje("Orden registrado");
				}
				else
					frmOrdenes.mostrarMensaje("Codigo registrado");
			}
			else
				frmOrdenes.mostrarMensaje("No ha registrado productos");
			else
				frmOrdenes.mostrarMensaje("Campos vacios");
		}
		else if(evt.getActionCommand().equals("Agregar")){
			if(frmOrdenes.getTblProductoOrdenes().getSelectedRow()!=-1){
				ModeloProducto m = new ModeloProducto();
				m.setCodigo((String)frmOrdenes.getTblProductoOrdenes().getValueAt(frmOrdenes.getTblProductoOrdenes().getSelectedRow(), 0));
				if(m.revisarStockIngredientes((frmOrdenes.cantidad()))){
						String des = (String)frmOrdenes.getTblProductoOrdenes().getValueAt(frmOrdenes.getTblProductoOrdenes().getSelectedRow(), 1);
						frmOrdenes.agregar(buscarProducto(des));
				}
				else
					frmOrdenes.mostrarMensaje("No tenemos stock pra cubrir su orden");
				
			}
			else
				frmOrdenes.mostrarMensaje("Selecionar un Ingrediente");
			
		}
		else if(evt.getActionCommand().equals("Retirar")){
			frmOrdenes.quitar();
		
		}
		
		
	}
	
	public ModeloProducto buscarProducto(String descripicion){
        for (int i = 0; i < productos.size(); i++)
            if(productos.elementAt(i).getDescripcion().equals(descripicion))
                return productos.elementAt(i);
        return null;
     }
	

}

